// 数据库操作
const mongoose = require('mongoose');
// 对象规则验证
const Joi = require('joi');

const {
	Schema
} = mongoose;

// 定义登录用户集合规则
const UserModel = new Schema({
	// 用户名称
	username: {
		type: String,
		required: true,
		minlength: 4,
		maxlength: 16
	},
	// 密码
	password: {
		type: String,
		required: true
	},
	// 头像
	avatar: {
		type: String,
		default: ''
	},
	mobile: {
		type: String,
		default: ''
	},
	// 性别
	sex: {
		type: Number,
		default: 0,
		enum: [0, 1,2]
	},
	// 收货地址
	receiving_address: {
		type: String,
		default: null
	},
	// 角色
	role: {
		type: String,
		// admin 超级管理员 normal 普通用户 business 商家用户
		default: 'normal',
		enum: ['admin', 'normal','business']
	},
	// 微信用户的openid
	openid: {
		type: String,
		default: '',
		unique: true
	},
	// 状态
	state: {
		// false 未激活 true 激活
		type: Boolean,
		default: true
	}
}, {
	versionKey: false
});

// 用户集合类
const User = mongoose.model('Users', UserModel);

// 添加用户数据格式校验
const validateUser = user => {
	// 定义对象验证规则
	const schema = {
		username: Joi.string().min(2).max(30).regex(/^[a-zA-Z0-9_-]{4,16}$/).required().error(new Error('用户名不符合验证规则')),
		password: Joi.string().required().regex(/^[a-zA-Z0-9]{3,30}$/).error(new Error('密码不符合验证规则')),
		mobile: Joi.string().min(11).max(11).required().regex(/^1[3|4|5|7|8][0-9]{9}$/).error(new Error('手机号不符合验证规则')),
		role: Joi.string().valid('normal', 'admin','business'),
		sex: Joi.number().valid(0, 1,2)
	};
	// 验证
	return Joi.validate(user, schema, {
		// 检测到所有错误
		abortEarly: false,
		// 允许对象包含被忽略的未知键
		allowUnknown: true
	});
}
// 添加用户数据格式校验
const validateWXUser = user => {
	// 定义对象验证规则
	const schema = {
		username: Joi.string().min(2).max(30).regex(/^[a-zA-Z0-9_-]{4,16}$/).required().error(new Error('用户名长度应在4-16位之间')),
		password: Joi.string().required().regex(/^[a-zA-Z0-9]{8,30}$/).error(new Error('密码长度应在8-30之间')),
		role: Joi.string().valid('normal', 'admin','business'),
		sex: Joi.number().valid(0, 1,2)
	};
	// 验证
	return Joi.validate(user, schema, {
		// 检测到所有错误
		abortEarly: false,
		// 允许对象包含被忽略的未知键
		allowUnknown: true
	});
}

// 登录数据格式校验
const validateLogin = user => {
	// 定义对象验证规则
	const schema = {
		username: Joi.string().regex(/^[a-zA-Z0-9_-]{4,16}$/).required().error(new Error('用户名或密码错误')),
		password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).error(new Error('用户名或密码错误'))
	};
	// 验证
	return Joi.validate(user, schema, {
		// 检测到错误立即返回
		abortEarly: true
	});
}

// User.findOne({
// 	'email': 'itheima@itcast.cn'
// }).then(async result => {
// 	if (result == null) {

// 		const user = await User.create({
// 			nickname: 'admin',
// 			password: 'admin',
// 			role: 'admin',
// 			avatar: null,
// 			createTime: new Date,
// 			status: 1
// 		});
// 	}
// })

// 导出对象
module.exports = {
	User,
	validateUser,
	validateWXUser,
	validateLogin
};
